Ce document vise à présenter notre démarche analytique dans le cadre du Data Challenge ENS sur l’assurance des bâtiments. L’objectif est de prédire la probabilité qu’un bâtiment soit sujet à un sinistre durant une période donnée, en se basant sur ses caractéristiques. À travers ce challenge, nous aborderons la modélisation de la fréquence des sinistres, essentielle dans le processus de tarification en assurance non-vie.
L’assurance bâtiment couvre les dommages susceptibles d’affecter la structure d’un logement (murs, toit, sols, et zones communes) causés par des événements comme les inondations, les tempêtes, les incendies ou le vandalisme.
Le défi proposé s’inscrit dans le processus de tarification de l’assurance non-vie, qui se décompose généralement en deux étapes :
Cependant, l’objectif de ce challenge est spécifique : il s’agit de prédire si un bâtiment déposera une réclamation d’assurance durant une période assurée, basé sur les caractéristiques du bâtiment. La variable cible est donc :
Les données en entrée contiennent les variables suivantes :
Un benchmark rapide avec un modèle xgboost a été réalisé, atteignant
un score NGC de 0.41. Il s’agit d’un modèle basique où toutes les
variables catégorielles sont codées par étiquette. Les variables les
plus importantes identifiées sont superficief,
ft_22_categ, EXPO.
La métrique utilisée pour ce challenge est le coefficient de Gini normalisé. L’objectif est de construire un modèle qui prédit l’ordre des sinistres. Un modèle est performant s’il détecte avec une plus grande probabilité les bâtiments ayant effectivement eu un sinistre.
Notre approche se déclinera en plusieurs étapes clés :
Ce document détaillera chaque étape de notre démarche, justifiera nos choix méthodologiques et interprétera les résultats obtenus afin de fournir une compréhension approfondie du phénomène étudié.
Pour commencer, nous vérifions si les packages nécessaires sont installés, et nous les installons s’ils ne le sont pas.
Lors de l’importation de X_test et X_train, nous procédons à la suppression de la première colonne. Cette colonne, souvent générée automatiquement lors de l’exportation des données depuis certaines applications ou bases de données, sert d’index. Cependant, dans le contexte de notre analyse, cette colonne d’index n’est pas nécessaire et peut même interférer avec notre traitement des données.
##
## 0 1
## 7907 2322
La classe “0” apparaît 7907 fois et la classe “1” 2322 fois.
##
## 0 1
## 77.29983 22.70017
77.3% des données sont de la classe 0 et 22.7% de la classe 1, illustrant un déséquilibre où la majorité des observations appartient à la classe 0.
L’exploration de la variable cible Y_train met en évidence une distribution asymétrique entre les classes, ce qui soulève des considérations importantes pour la modélisation. Avec 7 907 observations appartenant à la classe 0 (pas de sinistre) et 2 322 à la classe 1 (au moins un sinistre), nous observons une répartition de 77.3% pour la classe 0 et de 22.7% pour la classe 1.
Cette distribution indique un déséquilibre significatif, où la majorité des observations ne signalent aucun sinistre. Cet état de fait peut engendrer des biais dans les modèles prédictifs, qui pourraient être enclins à favoriser la prédiction de la classe majoritaire. Cette prédominance pourrait diminuer la sensibilité du modèle aux cas réels de sinistres, affectant ainsi négativement la performance du modèle sur des données moins fréquentes mais critiques.
Nous importons les données de correspondance entre le code INSEE et le code postal afin de maximiser les possibilités d’enrichissement de notre modèle avec des données externes.
Nous enrichissons les données d’entraînement (X_train) et de test (X_test) avec les données de correspondance en utilisant le code INSEE comme clé de jointure.
Vérification de l’enrichissement de X_test :
## [1] "Identifiant" "ft_2_categ" "EXPO"
## [4] "ft_4_categ" "ft_5_categ" "ft_6_categ"
## [7] "ft_7_categ" "ft_8_categ" "ft_9_categ"
## [10] "ft_10_categ" "ft_11_categ" "ft_12_categ"
## [13] "ft_13_categ" "ft_14_categ" "ft_15_categ"
## [16] "ft_16_categ" "ft_17_categ" "ft_18_categ"
## [19] "ft_19_categ" "superficief" "ft_21_categ"
## [22] "ft_22_categ" "ft_23_categ" "ft_24_categ"
## [25] "Insee" "Nom_de_la_commune" "Code_postal"
## [28] "Libellé_d_acheminement"
Vérification de l’enrichissement de X_train :
## [1] "Identifiant" "ft_2_categ" "EXPO"
## [4] "ft_4_categ" "ft_5_categ" "ft_6_categ"
## [7] "ft_7_categ" "ft_8_categ" "ft_9_categ"
## [10] "ft_10_categ" "ft_11_categ" "ft_12_categ"
## [13] "ft_13_categ" "ft_14_categ" "ft_15_categ"
## [16] "ft_16_categ" "ft_17_categ" "ft_18_categ"
## [19] "ft_19_categ" "superficief" "ft_21_categ"
## [22] "ft_22_categ" "ft_23_categ" "ft_24_categ"
## [25] "Insee" "Nom_de_la_commune" "Code_postal"
## [28] "Libellé_d_acheminement"
Nous ajoutons une nouvelle colonne intitulée “Numéro_Départements” créer à partir des deux premiers chiffres des codes postaux dans les ensembles de données X_train_enriched et X_test_enriched.
Nous enrichissons les ensembles de données X_train_enriched et X_test_enriched en ajoutant des informations sur les noms des départements et des régions.
Vérification de l’enrichissement de X_test_enriched :
## [1] "Identifiant" "ft_2_categ" "EXPO"
## [4] "ft_4_categ" "ft_5_categ" "ft_6_categ"
## [7] "ft_7_categ" "ft_8_categ" "ft_9_categ"
## [10] "ft_10_categ" "ft_11_categ" "ft_12_categ"
## [13] "ft_13_categ" "ft_14_categ" "ft_15_categ"
## [16] "ft_16_categ" "ft_17_categ" "ft_18_categ"
## [19] "ft_19_categ" "superficief" "ft_21_categ"
## [22] "ft_22_categ" "ft_23_categ" "ft_24_categ"
## [25] "Insee" "Nom_de_la_commune" "Code_postal"
## [28] "Libellé_d_acheminement" "Numéro_Départements" "Nom_département"
## [31] "Nom_région"
Vérification de l’enrichissement de X_train_enriched :
## [1] "Identifiant" "ft_2_categ" "EXPO"
## [4] "ft_4_categ" "ft_5_categ" "ft_6_categ"
## [7] "ft_7_categ" "ft_8_categ" "ft_9_categ"
## [10] "ft_10_categ" "ft_11_categ" "ft_12_categ"
## [13] "ft_13_categ" "ft_14_categ" "ft_15_categ"
## [16] "ft_16_categ" "ft_17_categ" "ft_18_categ"
## [19] "ft_19_categ" "superficief" "ft_21_categ"
## [22] "ft_22_categ" "ft_23_categ" "ft_24_categ"
## [25] "Insee" "Nom_de_la_commune" "Code_postal"
## [28] "Libellé_d_acheminement" "Numéro_Départements" "Nom_département"
## [31] "Nom_région"
Nous faisons l’hypothèse que la variable ft_22_categ représente l’année de construction du bâtiment. Cette supposition est basée sur des observations préliminaires des données et pourrait avoir des implications importantes pour notre modèle, étant donné que l’âge d’un bâtiment peut influencer sa susceptibilité à subir des sinistres.
On observe que les bâtiments construits dans les années 1910 et 1970 ont le plus grand nombre de sinistres, avec des pics particulièrement élevés comparés aux autres périodes. En revanche, les bâtiments construits avant 1900 et après 2000 montrent nettement moins de sinistres.
Cela peut suggérer plusieurs interprétations:
L’ajout de données sur les catastrophes naturelles peut s’avérer particulièrement pertinent. Ces données peuvent enrichir notre modèle prédictif en fournissant des informations contextuelles qui ne sont pas directement liées aux caractéristiques physiques des bâtiments, mais plutôt à leur environnement et aux événements historiques.
Nous intégrons donc des données concernant les inondations, un type de catastrophe naturelle significative en termes de fréquence et de gravité des sinistres. L’indicateur que nous utilisons est le nombre de reconnaissances de l’état de catastrophe naturelle pour les inondations publiées au Journal Officiel. Cela inclut les inondations au sens large, qui peuvent être dues à des événements comme des débordements de cours d’eau, des coulées de boue, des remontées de nappe phréatique, ou des submersions marines.
Vérification
Nous procédons à cette vérification pour nous assurer que lors de l’enrichissement des données d’entraînement avec les informations sur les inondations, chaque observation du jeu de données original a été préservée. Si le nombre de lignes reste identique entre le jeu de données original et celui enrichi après la jointure, cela indique que tous les enregistrements ont été maintenus et qu’il n’y a pas eu de perte de données. Cela validerait que l’opération de jointure a correctement associé les données supplémentaires à chaque entrée existante sans exclure ni dupliquer des lignes. Si le test renvoie “TRUE”, cela confirmerait que la correspondance entre les deux jeux de données est exacte.
## [1] TRUE
## [1] TRUE
De la même manière que pour les données d’inondations, nous enrichissons notre jeu de données avec un indicateur spécifique aux mouvements de terrain, un autre type de risque naturel qui peut impacter significativement la probabilité de sinistres sur les bâtiments. Cet indicateur représente le nombre de reconnaissances de l’état de catastrophe naturelle pour les mouvements de terrain, publiées au Journal Officiel depuis 1982. Les mouvements de terrain comprennent divers phénomènes tels que les glissements de terrain, les effondrements, les chutes de pierres, et les tassements différentiels.
L’ajout de cet indicateur aux données de chaque commune nous permet d’intégrer une dimension temporelle longue et de capter la fréquence à laquelle une commune a été confrontée à ce type de risque naturel.
Vérification
## [1] TRUE
## [1] TRUE
Pour enrichir davantage notre analyse, nous ajoutons également des données relatives aux mouvements de terrain différentiels causés par la sécheresse et la réhydratation des sols. Cet indicateur recense le nombre de reconnaissances de l’état de catastrophe naturelle spécifiquement attribuées à ce phénomène, telles qu’enregistrées au Journal Officiel depuis 1982.
Ces mouvements de terrain sont particulièrement pertinents pour les compagnies d’assurance car ils reflètent un type de sinistre qui peut causer des dommages structurels significatifs aux bâtiments. Ils sont généralement liés à des cycles climatiques qui provoquent une alternance de périodes de sécheresse et de réhydratation, entraînant des changements volumétriques dans les sols argileux qui peuvent affecter les fondations et la stabilité des constructions.
Vérification
## [1] TRUE
## [1] TRUE
Nous poursuivons l’enrichissement de notre jeu de données avec un indicateur dédié aux séismes. Ce dernier représente le nombre de reconnaissances de l’état de catastrophe naturelle pour les séismes par commune, enregistrées au Journal Officiel depuis 1982. Les séismes sont des événements naturels d’une grande importance dans l’évaluation des risques en assurance, en raison de leur potentiel destructeur pour les structures bâties.
Vérification
## [1] TRUE
## [1] TRUE
En plus des catastrophes naturelles, les données liées aux incidents de sécurité, comme les cambriolages, sont également cruciales pour l’évaluation des risques en assurance bâtiment. Nous intégrons donc un indicateur du taux moyen de cambriolage par département, basé sur les données collectées entre 2015 et 2019. Les cambriolages, en tant que sinistres potentiels, peuvent influencer considérablement le risque associé à une police d’assurance bâtiment.
Vérification
## [1] TRUE
## [1] TRUE
Matrice de corrélation
Nous avons utilisé une approche spécifique pour visualiser la matrice de corrélation entre les variables numériques, y compris la variable cible. Lorsque nous avons simplement tracé la matrice de corrélation, nous avons constaté que l’affichage n’était pas optimal, ce qui rendait difficile la lecture et l’interprétation des résultats.
Pour remédier à ce problème, nous avons adopté une approche en deux étapes. Tout d’abord, nous avons utilisé la fonction corrplot pour créer un graphique de la matrice de corrélation. Ensuite, pour garantir une meilleure qualité d’affichage, nous avons sauvegardé ce graphique à la fois dans un fichier PDF en mémoire et dans un fichier PNG temporaire. Cette étape nous a permis de manipuler l’image de manière plus flexible.
Ensuite, nous avons utilisé la bibliothèque base64enc pour encoder l’image PNG en base64. Cette étape est particulièrement utile si nous voulons incorporer l’image directement notre fichier Rmd. En encodant l’image en base64, nous pouvons l’intégrer facilement dans différents contextes sans avoir à manipuler des fichiers séparés.
Notre analyse de la matrice de corrélation révèle que la majorité des variables examinées fournissent des contributions distinctes au modèle. Ce constat est prometteur car il indique un minimum de chevauchement informationnel entre les variables, réduisant ainsi le risque de multicollinéarité lors de la modélisation prédictive. Cela signifie que chaque variable a le potentiel d’améliorer la robustesse du modèle sans empiéter sur l’information déjà apportée par une autre.
En particulier, la corrélation observée entre la variable superficief et la variable cible target est la plus élevée. Il est logique de supposer qu’un bâtiment de plus grande superficie ait un risque plus élevé de sinistre, puisqu’il y a davantage de surface susceptible d’être impactée.
Le premier modèle utilise un arbre de classification pour prédire la probabilité qu’un bâtiment dépose une réclamation d’assurance pendant une période donnée, en se basant sur ses caractéristiques.
Étape 1 : Préparation des données
Nous avons réparti notre jeu de données initial en deux sous-ensembles : 80% pour l’entraînement et 20% pour le test. Cette séparation a été réalisée en stratifiant selon la variable cible pour garantir une distribution équilibrée des classes dans chaque sous-ensemble.
Étape 2 : Prétraitement des données
Nous avons identifié les variables catégorielles comme celles ayant moins de 20 valeurs uniques et les avons converties en facteurs dans l’ensemble d’entraînement, ce qui est nécessaire pour la construction de l’arbre de décision.
Nous avons renommé plusieurs colonnes complexes en noms plus courts et plus compréhensibles, qui reflètent les différents types de catastrophes naturelles. Cette étape est cruciale pour faciliter les manipulations et les analyses ultérieures.
Les valeurs de la colonne EXPO, exprimées initialement avec des virgules comme séparateurs décimaux, ont été converties en format numérique en remplaçant les virgules par des points, puis en les convertissant en type numérique. Nous avons également vérifié et imputé les valeurs manquantes par la médiane pour cette colonne et d’autres colonnes numériques.
Dans le traitement des ensembles de données X_train_enriched et X_test_enriched, nous choisissons de retirer certaines colonnes qui ne sont pas utiles pour notre modèle. Les variables supprimées sont principalement des identifiants géographiques et des labels qui pourraient introduire du bruit ou un biais dans notre modèle, ou qui sont tout simplement redondantes.
Enfin, nous ajustons la colonne Taux_de_Cambriolage pour garantir que les données sont numériques et uniformément formatées (remplacement des virgules par des points et suppression des caractères non numériques). Nous calculons la médiane pour les valeurs de cambriolage et utilisons cette médiane pour imputer les valeurs manquantes dans cette colonne.
Étape 3 : Construction et évaluation de l’arbre de décision
Nous avons ensuite construit un arbre de décision en utilisant la fonction rpart. Pour comprendre l’importance des différentes variables et la structure de l’arbre, nous avons visualisé celui-ci avec la fonction prp, en montrant les informations supplémentaires telles que le gain d’information à chaque nœud.
Nous avons évalué les performances de notre modèle sur les ensembles d’apprentissage et de test à l’aide d’une matrice de confusion, nous permettant de calculer des mesures telles que la précision, la sensibilité, la spécificité, et la valeur prédictive.
## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 6040 1418
## 1 277 446
##
## Accuracy : 0.7928
## 95% CI : (0.7839, 0.8016)
## No Information Rate : 0.7722
## P-Value [Acc > NIR] : 3.588e-06
##
## Kappa : 0.2492
##
## Mcnemar's Test P-Value : < 2.2e-16
##
## Sensitivity : 0.9562
## Specificity : 0.2393
## Pos Pred Value : 0.8099
## Neg Pred Value : 0.6169
## Prevalence : 0.7722
## Detection Rate : 0.7383
## Detection Prevalence : 0.9116
## Balanced Accuracy : 0.5977
##
## 'Positive' Class : 0
##
## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 1502 364
## 1 88 94
##
## Accuracy : 0.7793
## 95% CI : (0.7607, 0.7971)
## No Information Rate : 0.7764
## P-Value [Acc > NIR] : 0.387
##
## Kappa : 0.1908
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.9447
## Specificity : 0.2052
## Pos Pred Value : 0.8049
## Neg Pred Value : 0.5165
## Prevalence : 0.7764
## Detection Rate : 0.7334
## Detection Prevalence : 0.9111
## Balanced Accuracy : 0.5749
##
## 'Positive' Class : 0
##
Le modèle présente une sensibilité élevée mais une spécificité très faible, ce qui signifie qu’il est bon pour détecter les cas positifs mais tend à mal classer de nombreux cas négatifs comme positifs. La valeur Kappa faible dans les deux cas indique également que la précision du modèle n’est pas beaucoup meilleure que le hasard, en particulier dans des situations où le taux de prévalence de l’une des classes est élevé.
Étape 4 : Analyse de la performance du modèle
Pour quantifier la capacité de notre modèle à distinguer entre les différentes classes, nous avons calculé l’AUC et, en conséquence, le score Gini normalisé. Ces mesures nous donnent une indication de la qualité de notre modèle dans le contexte de la prédiction des réclamations d’assurance pour les bâtiments.
## Area under the curve: 0.6056
## [1] "Le score Gini pour le modèle de l'arbre de décision est : 0.211172447886627"
Étape 5 : Prédiction des probabilités
Après avoir entraîné notre arbre de décision et évalué ses performances avec l’AUC et le score Gini, nous avons appliqué le modèle à notre ensemble de données de test enrichi pour prédire les probabilités de réclamations d’assurance. En utilisant la fonction predict et en spécifiant le type de sortie comme “prob”, notre modèle a généré les probabilités correspondantes pour chaque bâtiment dans l’ensemble de test, nous donnant ainsi des informations précieuses sur le risque associé à chaque propriété.
Afin de participer au Data Challenge de l’ENS, nous avons préparé un fichier de soumission comprenant les probabilités estimées de sinistre pour chaque bâtiment. Ce fichier aligne les identifiants des bâtiments avec les probabilités correspondantes, suivant le format requis par la plateforme du challenge.
La soumission de ce fichier sur le site du Data Challenge ENS a permis de convertir nos prédictions en un score de 0,1756.
Conclusion
L’analyse des performances de notre arbre de décision a fourni des insights pertinents sur ses capacités prédictives. Avec un AUC de 0.6056, le modèle démontre une certaine aptitude à distinguer les bâtiments susceptibles de subir un sinistre de ceux qui ne le sont pas, bien que l’espace pour améliorer sa discrimination soit notable. Le score Gini normalisé de 0.2111 renforce cette observation, indiquant que, bien que le modèle soit meilleur que le hasard, il y a une marge significative d’amélioration.
Fort de ces conclusions, nous avons entrepris de développer un deuxième modèle prédictif en utilisant l’algorithme avancé XGBoost. XGBoost, ou eXtreme Gradient Boosting, est une méthode d’apprentissage automatique qui s’est imposée dans les domaines du machine learning pour sa performance dans les tâches de classification et de régression. Ce modèle promet d’exploiter la structure des données d’une manière plus raffinée et potentiellement plus efficace grâce à ses capacités d’apprentissage en profondeur.
Transitionnant de l’approche de modélisation basée sur un arbre unique, XGBoost nous permet de combiner les prédictions de nombreux arbres de décision, potentiellement améliorant la robustesse et l’exactitude des prédictions. Notre objectif avec ce deuxième modèle est de capturer des interactions plus complexes entre les variables et de fournir une prédiction plus nuancée des probabilités de sinistre pour chaque bâtiment.
Dans les étapes suivantes, nous détaillons notre approche pour préparer les données pour XGBoost, optimiser ses paramètres et évaluer ses performances, visant à surpasser le modèle initial d’arbre de décision.
Nous a développé un deuxième modèle prédictif utilisant XGBoost pour estimer la probabilité qu’un bâtiment fasse l’objet d’une réclamation d’assurance durant une période donnée. Voici comment nous avons procédé et les résultats que nous avons obtenus.
Étape 1: Préparation des données
Nous avons commencé par partitionner les données en un ensemble d’entraînement (80%) et un ensemble de test (20%), en utilisant une fonction de partitionnement pour garantir la reproductibilité des résultats grâce à l’initialisation du générateur de nombres aléatoires (set.seed(1)).
Nous avons décidé d’exclure des colonnes spécifiques comme Libellé_d_acheminement, Insee, Nom_de_la_commune, et autres identificateurs qui ne sont pas utiles pour la modélisation. Ces informations sont principalement des identifiants et des descriptions textuelles qui n’apportent pas de valeur prédictive significative à notre modèle.
Les données EXPO contenaient des valeurs numériques formatées avec des virgules pour les décimales, que nous avons converties en points pour uniformiser le format numérique, suivi de la conversion en type numérique réel (as.numeric).
Pour les colonnes numériques, nous avons remplacé les valeurs manquantes par la médiane, qui est moins sensible aux valeurs aberrantes que la moyenne, assurant ainsi une meilleure robustesse des données.
Nous ajustons la colonne Taux_de_Cambriolage pour garantir que les données sont numériques et uniformément formatées (remplacement des virgules par des points et suppression des caractères non numériques). Nous calculons la médiane pour les valeurs de cambriolage et utilisons cette médiane pour imputer les valeurs manquantes dans cette colonne.
Pour les variables catégorielles comme ft_8_categ, nous les avons converties en facteurs puis en numériques, attribuant des entiers uniques à chaque catégorie.
Nous avons donc converti toutes les colonnes en valeurs numériques, ce qui est une exigence pour utiliser efficacement l’algorithme de machine learning XGBoost, qui manipule des données numériques.
En préparant les données de cette manière, nous assurons que notre modèle XGBoost peut être entraîné efficacement, en utilisant des caractéristiques pertinentes et bien formatées, optimisant ainsi la précision de la prédiction sur les données de test.
Étape 2: Configuration du modèle XGBoost
Pour optimiser les hyperparamètres de XGBoost, nous avons utilisé une grille de recherche (tuneGrid) avec des paramètres prédéfinis. Ces paramètres incluaient le nombre de cycles de boosting (nrounds), la profondeur maximale des arbres (max_depth), le poids minimal des enfants (min_child_weight), la fraction d’échantillons utilisés pour entraîner chaque arbre (subsample), la fraction des colonnes à utiliser par arbre (colsample_bytree), le taux d’apprentissage (eta), et le paramètre de régularisation (gamma).
Nous avons ensuite utilisé une validation croisée à 10 plis pour évaluer les modèles, ce qui a permis de minimiser le sur-ajustement et d’améliorer la robustesse du modèle final.
Étape 3: Résultats et validation du modèle
Le meilleur ensemble de paramètres a été automatiquement sélectionné par la grille de recherche. Avec ces paramètres optimisés, nous avons entraîné le modèle final, utilisé pour prédire les probabilités de sinistre sur l’ensemble de test. Nous avons également produit une matrice d’importance pour identifier les variables les plus influentes dans les prédictions du modèle, et nous avons visualisé les premiers arbres du modèle pour mieux comprendre les décisions prises par le modèle.
## nrounds max_depth eta gamma colsample_bytree min_child_weight subsample
## 1 50 4 0.1 0 0.7 1 0.8
## [1] train-auc:0.617951 test-auc:0.585399
## [2] train-auc:0.639577 test-auc:0.614685
## [3] train-auc:0.648166 test-auc:0.619342
## [4] train-auc:0.713357 test-auc:0.692575
## [5] train-auc:0.728109 test-auc:0.701737
## [6] train-auc:0.735368 test-auc:0.709934
## [7] train-auc:0.739899 test-auc:0.713630
## [8] train-auc:0.741376 test-auc:0.713486
## [9] train-auc:0.742668 test-auc:0.713964
## [10] train-auc:0.744505 test-auc:0.715011
## [11] train-auc:0.747454 test-auc:0.714159
## [12] train-auc:0.747856 test-auc:0.713351
## [13] train-auc:0.750375 test-auc:0.714449
## [14] train-auc:0.752229 test-auc:0.713834
## [15] train-auc:0.752641 test-auc:0.715452
## [16] train-auc:0.753237 test-auc:0.714941
## [17] train-auc:0.753126 test-auc:0.714793
## [18] train-auc:0.753580 test-auc:0.714366
## [19] train-auc:0.754381 test-auc:0.714680
## [20] train-auc:0.755541 test-auc:0.715124
## [21] train-auc:0.756571 test-auc:0.714962
## [22] train-auc:0.756716 test-auc:0.715620
## [23] train-auc:0.758096 test-auc:0.717009
## [24] train-auc:0.758566 test-auc:0.716705
## [25] train-auc:0.758844 test-auc:0.715990
## [26] train-auc:0.759152 test-auc:0.716350
## [27] train-auc:0.760170 test-auc:0.716285
## [28] train-auc:0.761817 test-auc:0.715996
## [29] train-auc:0.762465 test-auc:0.716129
## [30] train-auc:0.762794 test-auc:0.716401
## [31] train-auc:0.763513 test-auc:0.716718
## [32] train-auc:0.763694 test-auc:0.716761
## [33] train-auc:0.764226 test-auc:0.716924
## [34] train-auc:0.764837 test-auc:0.717479
## [35] train-auc:0.765081 test-auc:0.717377
## [36] train-auc:0.765904 test-auc:0.717718
## [37] train-auc:0.766810 test-auc:0.718535
## [38] train-auc:0.767110 test-auc:0.718803
## [39] train-auc:0.768212 test-auc:0.718485
## [40] train-auc:0.768432 test-auc:0.718719
## [41] train-auc:0.768651 test-auc:0.718124
## [42] train-auc:0.769324 test-auc:0.717652
## [43] train-auc:0.769895 test-auc:0.717120
## [44] train-auc:0.770589 test-auc:0.717452
## [45] train-auc:0.771128 test-auc:0.717384
## [46] train-auc:0.771630 test-auc:0.717457
## [47] train-auc:0.771822 test-auc:0.717444
## [48] train-auc:0.772361 test-auc:0.717839
## [49] train-auc:0.772658 test-auc:0.718016
## [50] train-auc:0.772866 test-auc:0.717774
## [51] train-auc:0.773290 test-auc:0.717656
## [52] train-auc:0.773956 test-auc:0.718448
## [53] train-auc:0.774114 test-auc:0.718650
## [54] train-auc:0.774962 test-auc:0.718356
## [55] train-auc:0.775689 test-auc:0.717914
## [56] train-auc:0.776759 test-auc:0.717604
## [57] train-auc:0.777736 test-auc:0.717807
## [58] train-auc:0.778569 test-auc:0.717719
## [59] train-auc:0.779129 test-auc:0.717654
## [60] train-auc:0.779602 test-auc:0.717316
## [61] train-auc:0.780058 test-auc:0.717257
## [62] train-auc:0.780646 test-auc:0.717424
## [63] train-auc:0.781064 test-auc:0.717755
## [64] train-auc:0.781466 test-auc:0.717420
## [65] train-auc:0.781975 test-auc:0.717388
## [66] train-auc:0.782388 test-auc:0.717290
## [67] train-auc:0.783046 test-auc:0.717453
## [68] train-auc:0.783803 test-auc:0.716950
## [69] train-auc:0.784831 test-auc:0.718033
## [70] train-auc:0.785918 test-auc:0.717925
## [71] train-auc:0.786587 test-auc:0.718141
## [72] train-auc:0.787248 test-auc:0.719061
## [73] train-auc:0.788150 test-auc:0.719182
## [74] train-auc:0.788868 test-auc:0.718886
## [75] train-auc:0.789087 test-auc:0.718774
## [76] train-auc:0.789508 test-auc:0.718774
## [77] train-auc:0.790079 test-auc:0.718665
## [78] train-auc:0.790296 test-auc:0.718679
## [79] train-auc:0.790496 test-auc:0.718425
## [80] train-auc:0.791342 test-auc:0.718468
## [81] train-auc:0.791902 test-auc:0.719021
## [82] train-auc:0.792636 test-auc:0.718969
## [83] train-auc:0.792671 test-auc:0.718913
## [84] train-auc:0.793503 test-auc:0.718416
## [85] train-auc:0.794202 test-auc:0.717898
## [86] train-auc:0.794535 test-auc:0.717594
## [87] train-auc:0.794664 test-auc:0.717637
## [88] train-auc:0.795148 test-auc:0.717559
## [89] train-auc:0.795666 test-auc:0.717647
## [90] train-auc:0.795904 test-auc:0.717572
## [91] train-auc:0.796375 test-auc:0.717770
## [92] train-auc:0.796622 test-auc:0.717646
## [93] train-auc:0.797029 test-auc:0.717678
## [94] train-auc:0.797449 test-auc:0.717634
## [95] train-auc:0.798638 test-auc:0.717678
## [96] train-auc:0.799039 test-auc:0.717943
## [97] train-auc:0.799282 test-auc:0.718084
## [98] train-auc:0.800534 test-auc:0.717560
## [99] train-auc:0.800821 test-auc:0.717478
## [100] train-auc:0.801150 test-auc:0.717626
Étape 4: Évaluation des performances
Pour évaluer les performances de notre modèle, nous avons calculé l’AUC (Area Under the Curve) et le coefficient de Gini normalisé.
## [1] "AUC: 0.717625904111164"
## [1] "Le score Gini pour le modèle XGBoost : 0.435251808222329"
Étape 5: Prédiction sur l’ensemble de test
Nous avons complété notre analyse en effectuant des prédictions sur l’ensemble de test. Cette étape finale utilise le modèle final pour prédire les probabilités que chaque bâtiment dans l’ensemble de test dépose une réclamation d’assurance.
Nous avons préparé un fichier de soumission comprenant les probabilités estimées de sinistre pour chaque bâtiment. La soumission de ce fichier sur le site du Data Challenge ENS a permis de convertir nos prédictions en un score de 0,3960.
Conclusion
L’approche XGBoost a démontré son efficacité par rapport au modèle précédent de l’arbre de décision, avec un score AUC nettement amélioré de 0.7176, ce qui reflète une meilleure capacité à différencier les bâtiments susceptibles de soumettre une réclamation d’assurance. Le score Gini normalisé a doublé à 0.4352, indiquant que le modèle XGBoost est nettement plus discriminant que le modèle basé sur un seul arbre de classification.
Les améliorations apportées par XGBoost résident dans sa capacité à combiner les prédictions de multiples arbres de décision, permettant ainsi de capturer des nuances plus complexes au sein des données. L’interprétation des variables importantes et la visualisation des arbres contribuent à une compréhension transparente des facteurs influençant les prédictions. En outre, le modèle a été validé à travers un processus rigoureux de validation croisée, renforçant notre confiance dans sa capacité à généraliser au-delà de l’ensemble d’entraînement.
Dans le cadre de notre étude avec le modèle XGBoost un aspect crucial a été l’optimisation des hyperparamètres. Ici, pour des raisons computationnelles, notre grille de recherche (tuneGrid) a été intentionnellement simplifiée, ne contenant qu’une seule valeur pour chaque paramètre. Cette approche visait à réduire la charge et le temps de calcul nécessaires pour trouver une configuration performante. Avec cette configuration de base, nous avons atteint un score de 0,4328 sur le site de l’ENS, un résultat prometteur compte tenu de la simplicité du modèle.
Cependant, conscients du potentiel de l’optimisation pour améliorer davantage les performances, nous avons élargi notre grille de recherche. Le grid search était défini comme suit :
tuneGrid <- expand.grid( nrounds = c(50,100,150), max_depth = c(4,8,16,32), min_child_weight = c(1), subsample = c(0.8), colsample_bytree = c(0.7), eta = c(0.1,0.01,0.001), gamma = c(0) )
Cette approche plus exhaustive permet de tester une variété plus large de combinaisons, donnant au modèle la possibilité d’explorer divers scénarios de complexité et d’adaptabilité. En utilisant ce grid search élargi, nous avons pu améliorer le score de précision sur le site de l’ENS à 0,4400.
Alors que nous progressons vers l’implémentation de LightGBM (Light Gradient Boosting Machine), nous nous attendons à explorer d’autres façons d’optimiser la performance. LightGBM est connu pour sa rapidité et son efficacité sur les grands ensembles de données et sa capacité à gérer les variables catégorielles de manière native. Ces caractéristiques pourraient s’avérer avantageuses dans notre contexte, étant donné la nature de nos données et l’objectif de prédiction.
Dans les prochaines étapes, nous adapterons nos données aux spécifications de LightGBM et affinerons la configuration de notre modèle pour exploiter pleinement ses capacités. Nous évaluerons ensuite la performance du modèle LightGBM avec l’espoir d’améliorer encore les résultats obtenus avec XGBoost.
Étape 1 : Préparation des données
Nous avons préparé nos jeux de données pour l’entraînement et le test en les convertissant en matrices et en traitant les variables catégorielles, puisque LightGBM gère nativement les caractéristiques catégorielles.
Pour les colonnes numériques, nous avons imputé les valeurs manquantes par la médiane garantissant ainsi que nos modèles ne soient pas biaisés ou affectés par des erreurs dues à des valeurs manquantes.
Étape 2 : Configuration du modèle LightGBM
Nous avons défini les paramètres de LightGBM en choisissant un objectif binaire, puisque nous effectuons une classification. Nous avons opté pour une optimisation basée sur l’AUC avec des paramètres tels que le nombre de feuilles, le taux d’apprentissage et le nombre d’estimateurs, entre autres, pour contrôler la complexité du modèle et éviter le sur-ajustement.
Étape 3 : Entraînement du modèle et évaluation
En utilisant les données d’entraînement, nous avons entraîné le modèle avec 800 cycles de boosting, tout en évaluant les performances à la fois sur l’ensemble d’entraînement et de test pour surveiller l’évolution de l’AUC. Cette approche nous a permis de détecter et d’éviter le sur-ajustement.
## [LightGBM] [Info] Number of positive: 1838, number of negative: 6346
## [LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.000617 seconds.
## You can set `force_row_wise=true` to remove the overhead.
## And if memory is not enough, you can set `force_col_wise=true`.
## [LightGBM] [Info] Total Bins 959
## [LightGBM] [Info] Number of data points in the train set: 8184, number of used features: 17
## [LightGBM] [Info] [binary:BoostFromScore]: pavg=0.224585 -> initscore=-1.239147
## [LightGBM] [Info] Start training from score -1.239147
## [1]: train's auc:0.713943 test's auc:0.693123
## [2]: train's auc:0.716112 test's auc:0.694366
## [3]: train's auc:0.724614 test's auc:0.703037
## [4]: train's auc:0.72699 test's auc:0.706441
## [5]: train's auc:0.726658 test's auc:0.706631
## [6]: train's auc:0.731115 test's auc:0.710364
## [7]: train's auc:0.734219 test's auc:0.71153
## [8]: train's auc:0.738358 test's auc:0.716388
## [9]: train's auc:0.743107 test's auc:0.718201
## [10]: train's auc:0.742663 test's auc:0.717801
## [11]: train's auc:0.744657 test's auc:0.719031
## [12]: train's auc:0.745073 test's auc:0.720313
## [13]: train's auc:0.747891 test's auc:0.721379
## [14]: train's auc:0.748562 test's auc:0.720964
## [15]: train's auc:0.748568 test's auc:0.720651
## [16]: train's auc:0.750172 test's auc:0.721413
## [17]: train's auc:0.750775 test's auc:0.722176
## [18]: train's auc:0.751165 test's auc:0.722799
## [19]: train's auc:0.752332 test's auc:0.721768
## [20]: train's auc:0.752422 test's auc:0.721988
## [21]: train's auc:0.752682 test's auc:0.721783
## [22]: train's auc:0.752951 test's auc:0.721419
## [23]: train's auc:0.753138 test's auc:0.721115
## [24]: train's auc:0.753307 test's auc:0.720888
## [25]: train's auc:0.753338 test's auc:0.720651
## [26]: train's auc:0.754757 test's auc:0.721185
## [27]: train's auc:0.755015 test's auc:0.721541
## [28]: train's auc:0.755909 test's auc:0.721512
## [29]: train's auc:0.756596 test's auc:0.722375
## [30]: train's auc:0.756963 test's auc:0.722619
## [31]: train's auc:0.757446 test's auc:0.722039
## [32]: train's auc:0.757516 test's auc:0.721941
## [33]: train's auc:0.757713 test's auc:0.721857
## [34]: train's auc:0.758369 test's auc:0.721452
## [35]: train's auc:0.758383 test's auc:0.721396
## [36]: train's auc:0.758691 test's auc:0.722092
## [37]: train's auc:0.758805 test's auc:0.722565
## [38]: train's auc:0.758913 test's auc:0.722894
## [39]: train's auc:0.759094 test's auc:0.723021
## [40]: train's auc:0.7592 test's auc:0.723347
## [41]: train's auc:0.759774 test's auc:0.723232
## [42]: train's auc:0.759897 test's auc:0.723644
## [43]: train's auc:0.760079 test's auc:0.723694
## [44]: train's auc:0.760261 test's auc:0.723868
## [45]: train's auc:0.760348 test's auc:0.724142
## [46]: train's auc:0.761033 test's auc:0.724066
## [47]: train's auc:0.761015 test's auc:0.723962
## [48]: train's auc:0.761129 test's auc:0.723531
## [49]: train's auc:0.761143 test's auc:0.723716
## [50]: train's auc:0.761004 test's auc:0.723484
## [51]: train's auc:0.761246 test's auc:0.723645
## [52]: train's auc:0.761236 test's auc:0.723534
## [53]: train's auc:0.761442 test's auc:0.723663
## [54]: train's auc:0.761506 test's auc:0.723684
## [55]: train's auc:0.761774 test's auc:0.723692
## [56]: train's auc:0.761849 test's auc:0.724009
## [57]: train's auc:0.762022 test's auc:0.72405
## [58]: train's auc:0.762051 test's auc:0.724009
## [59]: train's auc:0.762443 test's auc:0.723898
## [60]: train's auc:0.762628 test's auc:0.724355
## [61]: train's auc:0.762542 test's auc:0.724294
## [62]: train's auc:0.762476 test's auc:0.724228
## [63]: train's auc:0.762419 test's auc:0.724189
## [64]: train's auc:0.762445 test's auc:0.723954
## [65]: train's auc:0.76296 test's auc:0.723848
## [66]: train's auc:0.763167 test's auc:0.723927
## [67]: train's auc:0.763356 test's auc:0.724003
## [68]: train's auc:0.763578 test's auc:0.724157
## [69]: train's auc:0.763947 test's auc:0.724056
## [70]: train's auc:0.764063 test's auc:0.724043
## [71]: train's auc:0.764267 test's auc:0.724083
## [72]: train's auc:0.764681 test's auc:0.724255
## [73]: train's auc:0.76485 test's auc:0.723989
## [74]: train's auc:0.765049 test's auc:0.723913
## [75]: train's auc:0.765106 test's auc:0.723813
## [76]: train's auc:0.765336 test's auc:0.723708
## [77]: train's auc:0.765518 test's auc:0.723808
## [78]: train's auc:0.7661 test's auc:0.7237
## [79]: train's auc:0.766277 test's auc:0.723686
## [80]: train's auc:0.766749 test's auc:0.723776
## [81]: train's auc:0.766979 test's auc:0.723523
## [82]: train's auc:0.767257 test's auc:0.72316
## [83]: train's auc:0.767439 test's auc:0.723127
## [84]: train's auc:0.7676 test's auc:0.723181
## [85]: train's auc:0.767666 test's auc:0.723
## [86]: train's auc:0.767966 test's auc:0.72308
## [87]: train's auc:0.768177 test's auc:0.723154
## [88]: train's auc:0.768413 test's auc:0.723097
## [89]: train's auc:0.768559 test's auc:0.723279
## [90]: train's auc:0.768721 test's auc:0.723247
## [91]: train's auc:0.768888 test's auc:0.723499
## [92]: train's auc:0.769265 test's auc:0.72364
## [93]: train's auc:0.769481 test's auc:0.723877
## [94]: train's auc:0.76973 test's auc:0.724167
## [95]: train's auc:0.770122 test's auc:0.72429
## [96]: train's auc:0.770414 test's auc:0.724181
## [97]: train's auc:0.770656 test's auc:0.724331
## [98]: train's auc:0.770943 test's auc:0.724403
## [99]: train's auc:0.771186 test's auc:0.724353
## [100]: train's auc:0.771585 test's auc:0.724308
## [101]: train's auc:0.771832 test's auc:0.724568
## [102]: train's auc:0.771978 test's auc:0.724624
## [103]: train's auc:0.772049 test's auc:0.724579
## [104]: train's auc:0.77214 test's auc:0.724641
## [105]: train's auc:0.772252 test's auc:0.724465
## [106]: train's auc:0.772414 test's auc:0.724508
## [107]: train's auc:0.772807 test's auc:0.724497
## [108]: train's auc:0.772798 test's auc:0.724619
## [109]: train's auc:0.773231 test's auc:0.724418
## [110]: train's auc:0.773276 test's auc:0.72457
## [111]: train's auc:0.773524 test's auc:0.724648
## [112]: train's auc:0.77363 test's auc:0.724827
## [113]: train's auc:0.773709 test's auc:0.724856
## [114]: train's auc:0.773803 test's auc:0.724812
## [115]: train's auc:0.773849 test's auc:0.724982
## [116]: train's auc:0.773934 test's auc:0.725144
## [117]: train's auc:0.774345 test's auc:0.725057
## [118]: train's auc:0.774603 test's auc:0.725245
## [119]: train's auc:0.774922 test's auc:0.725527
## [120]: train's auc:0.775177 test's auc:0.725639
## [121]: train's auc:0.77539 test's auc:0.725868
## [122]: train's auc:0.775703 test's auc:0.726146
## [123]: train's auc:0.775926 test's auc:0.726354
## [124]: train's auc:0.776089 test's auc:0.726457
## [125]: train's auc:0.776381 test's auc:0.72646
## [126]: train's auc:0.776495 test's auc:0.726545
## [127]: train's auc:0.776695 test's auc:0.726755
## [128]: train's auc:0.776915 test's auc:0.726881
## [129]: train's auc:0.777115 test's auc:0.726966
## [130]: train's auc:0.777255 test's auc:0.727025
## [131]: train's auc:0.777448 test's auc:0.726975
## [132]: train's auc:0.777583 test's auc:0.727026
## [133]: train's auc:0.777728 test's auc:0.726924
## [134]: train's auc:0.778021 test's auc:0.726782
## [135]: train's auc:0.778219 test's auc:0.726744
## [136]: train's auc:0.77831 test's auc:0.726714
## [137]: train's auc:0.778415 test's auc:0.726864
## [138]: train's auc:0.778628 test's auc:0.726748
## [139]: train's auc:0.778936 test's auc:0.726639
## [140]: train's auc:0.778954 test's auc:0.726686
## [141]: train's auc:0.779071 test's auc:0.726818
## [142]: train's auc:0.779232 test's auc:0.727034
## [143]: train's auc:0.779672 test's auc:0.727074
## [144]: train's auc:0.779816 test's auc:0.727109
## [145]: train's auc:0.780004 test's auc:0.72726
## [146]: train's auc:0.780216 test's auc:0.727358
## [147]: train's auc:0.780462 test's auc:0.727374
## [148]: train's auc:0.780595 test's auc:0.727534
## [149]: train's auc:0.780886 test's auc:0.727589
## [150]: train's auc:0.781138 test's auc:0.727429
## [151]: train's auc:0.781413 test's auc:0.727312
## [152]: train's auc:0.781699 test's auc:0.727306
## [153]: train's auc:0.781893 test's auc:0.727192
## [154]: train's auc:0.782239 test's auc:0.727295
## [155]: train's auc:0.782393 test's auc:0.727217
## [156]: train's auc:0.78259 test's auc:0.727421
## [157]: train's auc:0.782807 test's auc:0.72736
## [158]: train's auc:0.78316 test's auc:0.727263
## [159]: train's auc:0.783345 test's auc:0.727451
## [160]: train's auc:0.783697 test's auc:0.727346
## [161]: train's auc:0.783933 test's auc:0.727322
## [162]: train's auc:0.784109 test's auc:0.727222
## [163]: train's auc:0.784279 test's auc:0.72723
## [164]: train's auc:0.784412 test's auc:0.727179
## [165]: train's auc:0.784641 test's auc:0.727099
## [166]: train's auc:0.784832 test's auc:0.727076
## [167]: train's auc:0.785061 test's auc:0.727089
## [168]: train's auc:0.785409 test's auc:0.727134
## [169]: train's auc:0.785684 test's auc:0.727154
## [170]: train's auc:0.785964 test's auc:0.727064
## [171]: train's auc:0.786141 test's auc:0.727204
## [172]: train's auc:0.786316 test's auc:0.72718
## [173]: train's auc:0.786453 test's auc:0.727205
## [174]: train's auc:0.786632 test's auc:0.727233
## [175]: train's auc:0.78674 test's auc:0.727218
## [176]: train's auc:0.786923 test's auc:0.72734
## [177]: train's auc:0.787276 test's auc:0.727271
## [178]: train's auc:0.78758 test's auc:0.727244
## [179]: train's auc:0.787841 test's auc:0.727217
## [180]: train's auc:0.788124 test's auc:0.727368
## [181]: train's auc:0.78843 test's auc:0.727425
## [182]: train's auc:0.788715 test's auc:0.727684
## [183]: train's auc:0.788921 test's auc:0.727724
## [184]: train's auc:0.789177 test's auc:0.727903
## [185]: train's auc:0.789408 test's auc:0.728002
## [186]: train's auc:0.789599 test's auc:0.727997
## [187]: train's auc:0.789787 test's auc:0.727956
## [188]: train's auc:0.790024 test's auc:0.72781
## [189]: train's auc:0.790258 test's auc:0.727806
## [190]: train's auc:0.790522 test's auc:0.727818
## [191]: train's auc:0.790705 test's auc:0.727713
## [192]: train's auc:0.790993 test's auc:0.727614
## [193]: train's auc:0.791261 test's auc:0.727572
## [194]: train's auc:0.791404 test's auc:0.727294
## [195]: train's auc:0.791588 test's auc:0.72723
## [196]: train's auc:0.791726 test's auc:0.727218
## [197]: train's auc:0.791996 test's auc:0.727145
## [198]: train's auc:0.792348 test's auc:0.727154
## [199]: train's auc:0.792557 test's auc:0.727186
## [200]: train's auc:0.792746 test's auc:0.72719
## [1] "AUC: 0.728002022437408"
## [1] "Le score Gini pour le modèle LGMBoost : 0.456004044874816"
Étape 5 : Application des prédictions
Enfin, nous avons préparé un autre jeu de données (to_predict) pour la prédiction, en suivant la même procédure de prétraitement que pour les données de test. Nous avons ensuite utilisé notre modèle pour prédire les probabilités de sinistre pour ces données, ce qui peut être utilisé pour des décisions ultérieures dans le processus d’assurance.
Nous avons préparé un fichier de soumission comprenant les probabilités estimées de sinistre pour chaque bâtiment. La soumission de ce fichier sur le site du Data Challenge ENS a permis de convertir nos prédictions en un score de 0,3958.
Conclusion
Le modèle LGMBoost a montré des performances prometteuses avec une AUC de 0.7280, surpassant légèrement les résultats de l’approche XGBoost. Le score Gini, reflétant cette amélioration, atteint 0.4560, signifiant que notre modèle LGMBoost a réussi à mieux classer les bâtiments à risque par rapport aux modèles précédents.
La progression à travers les différentes méthodes de boosting a illustré comment l’ajustement fin des hyperparamètres, l’attention portée à l’équilibrage du modèle et l’évaluation rigoureuse de la performance peuvent aboutir à des améliorations significatives. La préparation minutieuse des données, l’optimisation des paramètres, et l’entraînement vigilant avec suivi des mesures de performance ont été des étapes clés pour atteindre une prédiction plus précise.
Au terme de notre étude dans le cadre du Data Challenge ENS sur l’assurance des bâtiments, notre analyse détaillée a permis de mettre en évidence la performance de différents modèles prédictifs, en mettant l’accent sur l’utilisation d’XGBoost et de LightGBM. Bien que chaque modèle ait offert des insights précieux, c’est finalement le modèle XGBoost qui a été retenu pour sa capacité supérieure à généraliser, comme en témoigne le score plus élevé obtenu sur le site du challenge ENS. Cette décision s’appuie sur la robustesse et la finesse des prédictions du modèle XGBoost, qui a su tirer parti des nuances complexes des données.
Dans notre modèle XGBoost, les caractéristiques comme la superficie
du bâtiment superficief, le temps assuré EXPO,
l’année de construction estimée ft_22_categ, le taux de
cambriolage Taux_de_Cambriolageet le nombre d’inondations
Nombre_d_innondations sont révélées être les plus
discriminantes. Cela suggère logiquement que des facteurs comme la
taille du bâtiment, son âge, la fréquence des sinistres locaux et la
criminalité environnante sont cruciaux dans l’évaluation des risques de
sinistre. Ces éléments reflètent les impacts directs et indirects sur la
probabilité de réclamations, mettant en lumière la complexité de la
tarification et de la gestion des risques dans l’assurance non-vie.
Le processus de modélisation a été exigeant mais extrêmement enrichissant. Nous avons approfondi notre compréhension des algorithmes avancés comme XGBoost et LightGBM, ce qui a nécessité une documentation approfondie et une curiosité technique constante. L’aspect le plus marquant et instructif de notre travail a été le traitement des données. L’ajustement précis des hyperparamètres et la manipulation adéquate des variables ont considérablement amélioré la précision de nos prédictions. Ce soin dans la préparation des données a renforcé notre modèle, permettant une interprétation plus claire et une prédiction plus fiable.
L’incorporation de données externes s’est avérée plus compliquée que prévu. La recherche et l’intégration de données pertinentes sur des éléments tels que les catastrophes naturelles et la criminalité locale ont présenté des défis significatifs, notamment en termes de fiabilité et de compatibilité des données. Cela a souligné l’importance d’une approche rigoureuse dans la sélection et le traitement des informations externes.
Pour des améliorations futures, enrichir notre modèle avec un éventail plus large de données externes pourrait être bénéfique. L’intégration de données supplémentaires sur des facteurs environnementaux et socio-économiques pourrait permettre une évaluation encore plus précise des risques. Cela pourrait également aider à mieux capturer les dynamiques locales qui influencent la fréquence et la sévérité des sinistres.